package cn.vshare.dao;

import cn.vshare.entity.Role;
import cn.vshare.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface UserDao  {
    /**
     * 添加用户 注册
     * @param user
     */
    int addUser(User user);

    /**
     * 注册用户
     * @param user
     * @return
     */
    User login(User user);
    /**
     * 动态查询用户信息
     * @param user
     * @return
     */
    List<User> queryAllUserByDynamic(User user);

    /**
     * 获取会员信息
     * @return
     */
    List<User> getAllMemberUser(Map<String, Object> map);

    /**
     * 统计会员信息查询条数
     * @param map
     * @return
     */
    Integer countAllMemberUser(Map<String, Object> map);

    /**
     * 根据时间,关键字获取用户信息
     * @return
     */
    List<User> getMemberUserByTimeAndKeyword(Map<String, Object> map);

    /**
     * 根据时间,关键字统计总行数
     * @return
     */
    Integer countMemberUserByTimeAndKeyword(Map<String, Object> map);

    /**
     * 修改用户信息
     * @param user
     */
    int updateUser(User user);
    /**
     * 通过禁言方式删除用户
     * @param user
     */
    void delUser(User user);

    /**
     * 恢复删除的用户
     * @param user
     */
    void RecoverDelUser(User user);

    /**
     * 通过id查询用户
     * @param user
     * @return
     */
    User queryUserById(User user);


    /**
     * 添加足迹
     * @param map
     */
    void addFootprint(Map map);

    /**
     * 添加访客
     * @param map
     */
    void addVisitor(Map map);

    void updateUserJinYan();

    /**
     *禁言用户/解禁用户
     * @param map
     * @return
     */
    boolean changeUserState(Map map);

    /**
     * 添加好友
     * @param map
     */
    void addFriend(Map map);

    /**
     * 删除好友
     * @param myId
     * @param friendId
     */
    void removeFriend(@Param("myId") String myId, @Param("friendId") String friendId);
    /**
     * 判断是否已经是好友
     * @param myId
     * @param friendId
     * @return
     */
     int isExistFriend(@Param("myId") String myId, @Param("friendId") String friendId);

    /**
     * 获取所有的好友
     * @param user
     * @return
     */
    List<User>  getAllFriend(User user);

    /**
     * 通过角色统计用户数
     * @param role
     * @return
     * @author penghaixin
     */
    int countUserByRole(Role role);


}
